{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "#matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /Users/wuhuan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting /Users/wuhuan/Desktop/CODE/train-images-idx3-ubyte.gz\n",
      "WARNING:tensorflow:From /Users/wuhuan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting /Users/wuhuan/Desktop/CODE/train-labels-idx1-ubyte.gz\n",
      "Extracting /Users/wuhuan/Desktop/CODE/t10k-images-idx3-ubyte.gz\n",
      "Extracting /Users/wuhuan/Desktop/CODE/t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /Users/wuhuan/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"/Users/wuhuan/Desktop/CODE\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.45259, the validation accuracy is 0.8776\n",
      "after 200 training steps, the loss is 0.470379, the validation accuracy is 0.8924\n",
      "after 300 training steps, the loss is 0.381537, the validation accuracy is 0.9146\n",
      "after 400 training steps, the loss is 0.276666, the validation accuracy is 0.9186\n",
      "after 500 training steps, the loss is 0.263564, the validation accuracy is 0.9308\n",
      "after 600 training steps, the loss is 0.266846, the validation accuracy is 0.9436\n",
      "after 700 training steps, the loss is 0.319187, the validation accuracy is 0.9434\n",
      "after 800 training steps, the loss is 0.192951, the validation accuracy is 0.9496\n",
      "after 900 training steps, the loss is 0.28864, the validation accuracy is 0.9422\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9522\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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kUeHuXGP8uGHDkLLP/DlCtGtez1pTVT5EolnukRERAFho0tERBQQNrpEREQB4ZhuCCnj/Uk6fb3ajS/O2GLlG7mjthvXedA+dknkC5Apf998OjzmMo6bdZk1vXlDZTeuVmuHG0/t/EHM88pP+4H9renm95TOt+bs7dXFmj6+nP9WD+7CkumpURe58SXXvRAx3y//ecWN83vZfbZGN9/8yvDr+ONN1nQr/B7dDBKIZ7pEREQBYaNLREQUEPbNhOrUxg0fq/1exGyvDPYell11Tuns9gvSufP7WNM/dvw0YfOafPiHRfrebt3nxtkaeZDhzLlXu/G22ZFvO2owKZiXahd3K8+x+xz9t+s9uvkQN874cqaVL8qeSopB81He7XXTrrCfCNYlPfLtP7EKfQH90PXd3HhrP+9lCG2Xhdx2l7AaRY9nukRERAFho0tERBQQNrpEREQBKfVjuqntW1vTN370Zdh87YffYk03fe+3hNWJDlT+tGXWdIfB3u00GuWvuFLbf9y4MLf7dJh4jTevlRUj5mv+6U5vYtofEfNVw5KwMXlSK3u3af1f1/9FzPfB2BPduPl+XlsRtJz5i934oTuvt9JW9fKua1h8xhtxnW+/4fatQI2emOybKt5vFuOZLhERUUDY6BIREQWk1HcvL+xXzZruVSH8m1waTthnf6C8ISGZmt0fW1fi2egc/bwwN6Z5UeHl+t7sNH93fSvt5DVHunGrwfPcuDjcDlKalf/Sfil8a99I3YmXecNzaVdvsPKN6+C9we3UPy9149wRta186r2AC01nb7LSStK655kuERFRQNjoEhERBaRUdi/7H6D+Y69nQ1IrBFsZIjqA+rqXFx1pp5XFCjcuSd2KpVnlD313e4Q88O18ePvjiljqS1mKSEryeueZLhERUUDY6BIREQWEjS4REVFASuWY7tquqW7cuEzkMVz/i+rTttu3DPGGISIiKiye6RIREQWEjS4REVFASmX3cn6e3NLejaec1tSNdV3kB9gTERFFg2e6REREAWGjS0REFBA2ukRERAEplWO6ze/13lBz5r1H5JNzfeIrQ0REpQbPdImIiALCRpeIiCggonwZOxERUSB4pktERBQQNrpEREQBYaNLREQUEDa6REREASnxja6IjBCRfSKyPMr8rUVkp4jkiMj1EfJ0F5FcJ9/pca1wnInIyU49c0Xk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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1、对模型结构的理解： \n",
    "    这是一个含有两个隐层的神经网络模型，采用全联接方式进行连接，其中L1层包含100个神经元，L2层包含10个神经元。激活函数为softmax，损失函数为交叉熵损失。\n",
    "\n",
    "2、对模型训练过程（梯度如何计算，参数如何更新）的理解： \n",
    "    模型的权重和偏置的初始化采用从截断的正态分布中输出随机值的方法；tf.train.GradientDescentOptimizer()使用随机梯度下降算法，使参数沿着梯度的反方向，即总损失减小的方向移动，实现更新参数。\n",
    "\n",
    "3、对计算图的理解： \n",
    "计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。\n",
    "计算图也叫数据流图，可以把计算图看做是一种有向图，Tensorflow 中的每一个计算都是计算图上的一个节点，而节点之间的边描述了计算之间的依赖关系。\n",
    "\n",
    "4、解释这⾥的模型为什么效果⽐较差： \n",
    "    训练效果差可能是因为定义了固定数值的学习率（0.3），在优化效率趋近平缓的时候没有采用更小的学习率；也有可能是L1层定义了过多的神经元（100个），从而学习到了无用的数据（噪声），可以采用dropout来改进。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
